package com.bestv.bsr.core.annotations;

import org.springframework.stereotype.Indexed;

import java.lang.annotation.*;

/**
 * component 增强
 * <p>
 * 处理如工厂类对多个同业务类型 bean 的平替
 * <p>
 * 区分cloud 和 standalone
 *
 * @author taojiacheng
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Indexed
public @interface OptionalComponent {

    /**
     * beanName
     * <p>
     * 单个 bean 直接加载
     * <p>
     * 多个相同 name 的 bean 只有basic 不为 true 的才会被 加载
     */
    String value();


    /**
     * 是否是基础的
     */
    boolean basic() default false;

    /**
     * 服务类型
     */
    Strategy strategy() default Strategy.STANDALONE;


    enum Strategy {
        /**
         * 本地
         */
        STANDALONE,
        /**
         * 服务化
         */
        CLOUD,
    }

}
